package chwgigs;

public class J22_privateConstructor {
//private 으로 선언된 생성자
//일반적으로 모든 생성자는 public 이어야 한다
// 클래스에 대한 객체를 생성하려면 
// 반드시 필요한 것이 생성자이기 때문임 
	
//하지만, 어떤 생성자는 private으로 만들어서 new 연산자로 그들의 
//클래스가 객체화되지 못하게 하는 경우도 있음 
// private 생성자를 사용한 클래스를 singleton클래스라 부른다. 
//
	
// 생성자는 private으로 선언해야 한다
// 객체변수는 private static 으로 선언해서 
// 클래스의 객체를 메서드를 통해 접근 가능하다
	
	
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
        /* Singleton one=new Singleton();
         Singleton two=new Singleton();
         Singleton three=new Singleton(); */
		
		 Singleton one=Singleton.newInstance();
		 Singleton two=Singleton.newInstance();
		 Singleton three=Singleton.newInstance();
       
	}//
	

}//
         class Singleton{
        	 private static Singleton object=null;
        	 //object 는 static 으로 선언되었기 때문에
        	 // 단 하나의 객체만 생성가능하다.(중요) 
        	 
        	 /* public Singleton(){
        		 System.out.println("객체가 하나 만들어졌네");
        	}  */    //일반 생성자 
        	
        	 private Singleton(){
        		 System.out.println("객체가 하나 만들어졌네");
        		 
        	 }
        	 //특수한 생성자 
        	  /* public static Singleton newInstance(){
        	    	Singleton object= new Singleton();
        	      return object;
        	    
        	    }*/ // 생성자는 일반 메서드를 통해서만 호출
        	
        	 public static Singleton newInstance(){
     	    	
     	    	if (object==null)object=new Singleton();
     	    	//객체가 만들어지지 않았다면 (object==null)
     	    	//객체를 하나 생성함 (new Singleton)
     	      return object;
        	 
         }
}//